package com.koi.common.utils.file;

import com.koi.common.ex.koi.YUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.text.DecimalFormat;

/**
 * @author ･ᴗ･
 * @description [文件类型工具类]
 */
public class FileTypeUtil {

    /**
     * @param file 文件名
     * @return 后缀（不含".")
     * @description [获取文件类型]
     * 例如: koi.txt, 返回: txt
     */
    public static String getFileType(File file) {
        if (null == file) {
            return StringUtils.EMPTY;
        }
        return getFileType(file.getName());
    }

    /**
     * @param fileName 文件名
     * @return 后缀（不含".")
     * @description [获取文件类型]
     * 例如: koi.txt, 返回: txt
     */
    public static String getFileType(String fileName) {
        int separatorIndex = fileName.lastIndexOf(".");
        if (separatorIndex < 0) {
            return "";
        }
        return fileName.substring(separatorIndex + 1).toLowerCase();
    }

    /**
     * @param fileName 文件名
     * @return 后缀（含".")
     * @description [获取文件类型]
     * <p>
     * 例如: koi.txt, 返回: txt
     */
    public static String getFileSuffix(String fileName) {
        int separatorIndex = fileName.lastIndexOf(".");
        if (separatorIndex < 0) {
            return "";
        }
        return fileName.substring(separatorIndex).toLowerCase();
    }

    /**
     * @description [获取文件名字]
     * @author ･ᴗ･
     */
    public static String getFileName(String fileName) {
        // 最后一个 . 的索引
        int pointIndex = fileName.lastIndexOf(".");
        if (pointIndex < 0) {
            return "";
        }
        // 文件名字
        return fileName.substring(0, pointIndex);
    }

    /**
     * @param photoByte 文件字节码
     * @return 后缀（不含".")
     * @description [获取文件类型]
     */
    public static String getFileExtendName(byte[] photoByte) {
        String strFileExtendName = "JPG";
        if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
                && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) {
            strFileExtendName = "GIF";
        } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) {
            strFileExtendName = "JPG";
        } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) {
            strFileExtendName = "BMP";
        } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) {
            strFileExtendName = "PNG";
        }
        return strFileExtendName;
    }

    /**
     * @description [获取文件大小]
     * @author ･ᴗ･
     */
    public static String getFileSize(MultipartFile file) {
        long size = file.getSize();
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString;
        if (size < 1024) {
            fileSizeString = df.format((double) size) + "B";
        } else if (size < 1048576) {
            fileSizeString = df.format((double) size / 1024) + "KB";
        } else if (size < 1073741824) {
            fileSizeString = df.format((double) size / 1048576) + "MB";
        } else {
            fileSizeString = df.format((double) size / 1073741824) + "GB";
        }
        return fileSizeString;
    }

    /**
     * @description [判断是否符合excel文件格式]
     * @author ･ᴗ･
     */
    public static void decideIsExcel(MultipartFile multipartFile) {
        // 1、是否空文件
        long size = multipartFile.getSize();
        YUtil.isTrue(size == 0, "请勿上传空文件");
        // 2、获取上传的文件名
        String fileName = multipartFile.getOriginalFilename();
        // 3、获取文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 4、根据文件后缀判断文件类型
        YUtil.isTrue(!suffix.equals(".xls") && !suffix.equals(".xlsx"), "上传文件必须是xlsx结尾");
    }

}
